package tests

import org.scalatest._
import tp1._
import org.scalatest.matchers.ShouldMatchers

class CarreraTest extends FlatSpec with ShouldMatchers{
  var materias =List(new Materia("bd"), new Materia("mate"), new Materia("persistencia"))
  var carrera = new Carrera("TPI", materias)
  
  "una carrera" should "deberia esta bien seteada" in {
   
    assert(carrera.materiasDeCarrera.size == 3)
    assert(carrera.nombreCarrera == "TPI")
    assert(carrera.estudiantes.size == 0)
  }
  
  "una carrera" should "inscribir a un estudiante" in {
   
    var alumno = new Estudiante("Mandanda", 23333)
    carrera.inscribir(alumno)
    assert(carrera.estudiantes.size == 1)
    assert(carrera.estudiantes.contains(alumno))
    
  }
  
  "una carrera" should "darme las cursadas de sus estudiantes" in {
   
    var alumno = new Estudiante("Mandanda", 23333)
    var alumno1 = new Estudiante("Pepe Chatruc", 23333)
    var abandonada = new Abandonada()
    var aprobada = new Aprobada()
    aprobada.initialize(7, new Materia("BD"),new Curso(new Docente("profe")))
    var aprobada1 = new Aprobada()
    aprobada1.initialize(8, new Materia("Mate"),new Curso(new Docente("profe")))
    var desaprobada = new Desaprobada()
    desaprobada.initialize(2, new Materia("BD"),new Curso(new Docente("profe")))
    alumno.actualizarFoja(abandonada)
    alumno.actualizarFoja(aprobada)
    alumno.actualizarFoja(aprobada)
    alumno1.actualizarFoja(desaprobada)
    alumno1.actualizarFoja(aprobada1)
    carrera.inscribir(alumno)
    carrera.inscribir(alumno1)
    
    var cursadas = carrera.getCursadas
    
    assert(cursadas.size == 5)
  }
  
  "una carrera" should "devolver 3 cursadas aprobadas" in {
    assert(carrera.cursadasAprobadas == 3)
  }
  
  "una carrera" should "devolver 1 cursadas abandonada" in {
    assert(carrera.cursosAbandonados == 1)
  }
  
  "una carrera" should "devolver 60.0 en cursos aprobados sobre iniciados" in {
    assert(carrera.cursosAprobadoSobreIniciados == 60.0)
  }
  
  "un carrera" should "devolver 6.0 en su promedio con aplazos" in {
    assert(carrera.promedioConAplazos == 6.0)
  }
  
  "un estudiante" should "devolver 6.25 en su promedio sin aplazos" in {
    assert(carrera.promedioSinAplazos.toInt == 7  )
  }
  
  "un estudiante" should "devolver una tabla de notas" in {
    var tabla = carrera.tablaDeNotas
    assert(tabla(1) == 0)
    assert(tabla(2) == 1)
    assert(tabla(3) == 0)
    assert(tabla(4) == 0)
    assert(tabla(5) == 0)
    assert(tabla(6) == 0)
    assert(tabla(7) == 2)
    assert(tabla(8) == 1)
    assert(tabla(9) == 0)
    assert(tabla(10) == 0)
    
  }
}